.386
.model flat,c
public asm_main
extern put:near,memalloc:near;
.data
TV$$ dd 0
	dd TV$Start
Tree$$ dd 0
	dd Tree$Init
	dd Tree$SetRight
	dd Tree$SetLeft
	dd Tree$GetRight
	dd Tree$GetLeft
	dd Tree$GetKey
	dd Tree$SetKey
	dd Tree$GetHas_Right
	dd Tree$GetHas_Left
	dd Tree$SetHas_Left
	dd Tree$SetHas_Right
	dd Tree$Compare
	dd Tree$Insert
	dd Tree$Delete
	dd Tree$Remove
	dd Tree$RemoveRight
	dd Tree$RemoveLeft
	dd Tree$Search
	dd Tree$Print
	dd Tree$RecPrint
	dd Tree$accept
Visitor$$ dd 0
	dd Visitor$visit
MyVisitor$$ dd Visitor$$
	dd MyVisitor$visit
.code
asm_main:
	push ecx		; Save 'this' pointer for current function
	push ecx
	push 4		; Instantiating class TV
	call memalloc
	add esp,4
	pop ecx
	lea edx,TV$$
	mov [eax],edx
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+4]		; Calling method TV.Start()
	pop ecx		; Recover 'this' pointer for current function
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	ret		; Retrun from asm_main
TV$Start:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,16		; Allocate new stack frame
	push ecx
	push 28		; Instantiating class Tree
	call memalloc
	add esp,4
	pop ecx
	lea edx,Tree$$
	mov [eax],edx
	mov [ebp-4],eax		; Assigning eax into variable root
	push ecx		; Save 'this' pointer for current function
	mov eax,16
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+4]		; Calling method Tree.Init()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+76]		; Calling method Tree.Print()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	mov eax,100000000
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,8
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+52]		; Calling method Tree.Insert()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,24
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+52]		; Calling method Tree.Insert()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,4
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+52]		; Calling method Tree.Insert()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,12
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+52]		; Calling method Tree.Insert()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,20
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+52]		; Calling method Tree.Insert()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,28
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+52]		; Calling method Tree.Insert()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,14
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+52]		; Calling method Tree.Insert()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+76]		; Calling method Tree.Print()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	mov eax,100000000
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx
	push 12		; Instantiating class MyVisitor
	call memalloc
	add esp,4
	pop ecx
	lea edx,MyVisitor$$
	mov [eax],edx
	mov [ebp-16],eax		; Assigning eax into variable v
	mov eax,50000000
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-16]		; Assigning address of variable v into eax
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+84]		; Calling method Tree.accept()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-12],eax		; Assigning eax into variable nti
	mov eax,100000000
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,24
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+72]		; Calling method Tree.Search()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,12
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+72]		; Calling method Tree.Search()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,16
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+72]		; Calling method Tree.Search()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,50
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+72]		; Calling method Tree.Search()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,12
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+72]		; Calling method Tree.Search()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,12
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+56]		; Calling method Tree.Delete()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+76]		; Calling method Tree.Print()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,12
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable root into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+72]		; Calling method Tree.Search()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	mov eax,0
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from TV$Start
Tree$Init:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ebp+8]		; Assigning address of parameter v_key into eax
	mov [ecx+16],eax		; Assigning eax into field key
	mov eax,0
	mov [ecx+20],eax		; Assigning eax into field has_left
	mov eax,0
	mov [ecx+24],eax		; Assigning eax into field has_right
	mov eax,1
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$Init
Tree$SetRight:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ebp+8]		; Assigning address of parameter rn into eax
	mov [ecx+12],eax		; Assigning eax into field right
	mov eax,1
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$SetRight
Tree$SetLeft:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ebp+8]		; Assigning address of parameter ln into eax
	mov [ecx+8],eax		; Assigning eax into field left
	mov eax,1
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$SetLeft
Tree$GetRight:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ecx+12]		; Assigning address of field right into eax
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$GetRight
Tree$GetLeft:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ecx+8]		; Assigning address of field left into eax
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$GetLeft
Tree$GetKey:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ecx+16]		; Assigning address of field key into eax
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$GetKey
Tree$SetKey:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ebp+8]		; Assigning address of parameter v_key into eax
	mov [ecx+16],eax		; Assigning eax into field key
	mov eax,1
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$SetKey
Tree$GetHas_Right:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ecx+24]		; Assigning address of field has_right into eax
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$GetHas_Right
Tree$GetHas_Left:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ecx+20]		; Assigning address of field has_left into eax
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$GetHas_Left
Tree$SetHas_Left:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ebp+8]		; Assigning address of parameter val into eax
	mov [ecx+20],eax		; Assigning eax into field has_left
	mov eax,1
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$SetHas_Left
Tree$SetHas_Right:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	mov eax,[ebp+8]		; Assigning address of parameter val into eax
	mov [ecx+24],eax		; Assigning eax into field has_right
	mov eax,1
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$SetHas_Right
Tree$Compare:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,8		; Allocate new stack frame
	mov eax,0
	mov [ebp-4],eax		; Assigning eax into variable ntb
	mov eax,[ebp+12]		; Assigning address of parameter num2 into eax
	push eax
	mov eax,1
	pop edx
	add eax,edx
	mov [ebp-8],eax		; Assigning eax into variable nti
	mov eax,[ebp+8]		; Assigning address of parameter num1 into eax
	push eax
	mov eax,[ebp+12]		; Assigning address of parameter num2 into eax
	pop edx
	cmp edx,eax
	jl BooleanExpression1IsTrue
	mov eax,0
	jmp BooleanExpression1Store
BooleanExpression1IsTrue:
	mov eax,1
BooleanExpression1Store:
	cmp eax,0
	je Else1
	mov eax,0
	mov [ebp-4],eax		; Assigning eax into variable ntb
	jmp Else1End
Else1:
	mov eax,[ebp+8]		; Assigning address of parameter num1 into eax
	push eax
	mov eax,[ebp-8]		; Assigning address of variable nti into eax
	pop edx
	cmp edx,eax
	jl BooleanExpression2IsTrue
	mov eax,0
	jmp BooleanExpression2Store
BooleanExpression2IsTrue:
	mov eax,1
BooleanExpression2Store:
	xor eax,1
	cmp eax,0
	je Else2
	mov eax,0
	mov [ebp-4],eax		; Assigning eax into variable ntb
	jmp Else2End
Else2:
	mov eax,1
	mov [ebp-4],eax		; Assigning eax into variable ntb
Else2End:
Else1End:
	mov eax,[ebp-4]		; Assigning address of variable ntb into eax
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$Compare
Tree$Insert:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,20		; Allocate new stack frame
	push ecx
	push 28		; Instantiating class Tree
	call memalloc
	add esp,4
	pop ecx
	lea edx,Tree$$
	mov [eax],edx
	mov [ebp-4],eax		; Assigning eax into variable new_node
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter v_key into eax
	push eax		; Pushing Parameter 1
	mov eax,[ebp-4]		; Assigning address of variable new_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+4]		; Calling method Tree.Init()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	mov eax,ecx
	mov [ebp-12],eax		; Assigning eax into variable current_node
	mov eax,1
	mov [ebp-16],eax		; Assigning eax into variable cont
	jmp While1Test
While1Loop:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-12]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+24]		; Calling method Tree.GetKey()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-20],eax		; Assigning eax into variable key_aux
	mov eax,[ebp+8]		; Assigning address of parameter v_key into eax
	push eax
	mov eax,[ebp-20]		; Assigning address of variable key_aux into eax
	pop edx
	cmp edx,eax
	jl BooleanExpression3IsTrue
	mov eax,0
	jmp BooleanExpression3Store
BooleanExpression3IsTrue:
	mov eax,1
BooleanExpression3Store:
	cmp eax,0
	je Else3
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-12]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+36]		; Calling method Tree.GetHas_Left()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else4
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-12]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+20]		; Calling method Tree.GetLeft()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-12],eax		; Assigning eax into variable current_node
	jmp Else4End
Else4:
	mov eax,0
	mov [ebp-16],eax		; Assigning eax into variable cont
	push ecx		; Save 'this' pointer for current function
	mov eax,1
	push eax		; Pushing Parameter 1
	mov eax,[ebp-12]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+40]		; Calling method Tree.SetHas_Left()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable new_node into eax
	push eax		; Pushing Parameter 1
	mov eax,[ebp-12]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+12]		; Calling method Tree.SetLeft()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
Else4End:
	jmp Else3End
Else3:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-12]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+32]		; Calling method Tree.GetHas_Right()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else5
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-12]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+16]		; Calling method Tree.GetRight()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-12],eax		; Assigning eax into variable current_node
	jmp Else5End
Else5:
	mov eax,0
	mov [ebp-16],eax		; Assigning eax into variable cont
	push ecx		; Save 'this' pointer for current function
	mov eax,1
	push eax		; Pushing Parameter 1
	mov eax,[ebp-12]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+44]		; Calling method Tree.SetHas_Right()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable new_node into eax
	push eax		; Pushing Parameter 1
	mov eax,[ebp-12]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+8]		; Calling method Tree.SetRight()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable ntb
Else5End:
Else3End:
While1Test:
	mov eax,[ebp-16]		; Assigning address of variable cont into eax
	cmp eax,0
	jg While1Loop
	mov eax,1
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$Insert
Tree$Delete:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,28		; Allocate new stack frame
	mov eax,ecx
	mov [ebp-4],eax		; Assigning eax into variable current_node
	mov eax,ecx
	mov [ebp-8],eax		; Assigning eax into variable parent_node
	mov eax,1
	mov [ebp-12],eax		; Assigning eax into variable cont
	mov eax,0
	mov [ebp-16],eax		; Assigning eax into variable found
	mov eax,1
	mov [ebp-24],eax		; Assigning eax into variable is_root
	jmp While2Test
While2Loop:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+24]		; Calling method Tree.GetKey()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-28],eax		; Assigning eax into variable key_aux
	mov eax,[ebp+8]		; Assigning address of parameter v_key into eax
	push eax
	mov eax,[ebp-28]		; Assigning address of variable key_aux into eax
	pop edx
	cmp edx,eax
	jl BooleanExpression4IsTrue
	mov eax,0
	jmp BooleanExpression4Store
BooleanExpression4IsTrue:
	mov eax,1
BooleanExpression4Store:
	cmp eax,0
	je Else6
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+36]		; Calling method Tree.GetHas_Left()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else7
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov [ebp-8],eax		; Assigning eax into variable parent_node
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+20]		; Calling method Tree.GetLeft()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable current_node
	jmp Else7End
Else7:
	mov eax,0
	mov [ebp-12],eax		; Assigning eax into variable cont
Else7End:
	jmp Else6End
Else6:
	mov eax,[ebp-28]		; Assigning address of variable key_aux into eax
	push eax
	mov eax,[ebp+8]		; Assigning address of parameter v_key into eax
	pop edx
	cmp edx,eax
	jl BooleanExpression5IsTrue
	mov eax,0
	jmp BooleanExpression5Store
BooleanExpression5IsTrue:
	mov eax,1
BooleanExpression5Store:
	cmp eax,0
	je Else8
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+32]		; Calling method Tree.GetHas_Right()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else9
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov [ebp-8],eax		; Assigning eax into variable parent_node
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+16]		; Calling method Tree.GetRight()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable current_node
	jmp Else9End
Else9:
	mov eax,0
	mov [ebp-12],eax		; Assigning eax into variable cont
Else9End:
	jmp Else8End
Else8:
	mov eax,[ebp-24]		; Assigning address of variable is_root into eax
	cmp eax,0
	je Else10
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+32]		; Calling method Tree.GetHas_Right()
	pop ecx		; Recover 'this' pointer for current function
	xor eax,1
	cmp eax,0
	je BooleanExpression6IsFalse
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+36]		; Calling method Tree.GetHas_Left()
	pop ecx		; Recover 'this' pointer for current function
	xor eax,1
	cmp eax,0
	je BooleanExpression6IsFalse
	mov eax,1
	jmp BooleanExpression6Store
BooleanExpression6IsFalse:
	mov eax,0
BooleanExpression6Store:
	cmp eax,0
	je Else11
	mov eax,1
	mov [ebp-20],eax		; Assigning eax into variable ntb
	jmp Else11End
Else11:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	push eax		; Pushing Parameter 2
	mov eax,[ebp-8]		; Assigning address of variable parent_node into eax
	push eax		; Pushing Parameter 1
	mov eax,ecx
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+60]		; Calling method Tree.Remove()
	add esp,8
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-20],eax		; Assigning eax into variable ntb
Else11End:
	jmp Else10End
Else10:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	push eax		; Pushing Parameter 2
	mov eax,[ebp-8]		; Assigning address of variable parent_node into eax
	push eax		; Pushing Parameter 1
	mov eax,ecx
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+60]		; Calling method Tree.Remove()
	add esp,8
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-20],eax		; Assigning eax into variable ntb
Else10End:
	mov eax,1
	mov [ebp-16],eax		; Assigning eax into variable found
	mov eax,0
	mov [ebp-12],eax		; Assigning eax into variable cont
Else8End:
Else6End:
	mov eax,0
	mov [ebp-24],eax		; Assigning eax into variable is_root
While2Test:
	mov eax,[ebp-12]		; Assigning address of variable cont into eax
	cmp eax,0
	jg While2Loop
	mov eax,[ebp-16]		; Assigning address of variable found into eax
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$Delete
Tree$Remove:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,12		; Allocate new stack frame
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+36]		; Calling method Tree.GetHas_Left()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else12
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	push eax		; Pushing Parameter 2
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	push eax		; Pushing Parameter 1
	mov eax,ecx
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+68]		; Calling method Tree.RemoveLeft()
	add esp,8
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	jmp Else12End
Else12:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+32]		; Calling method Tree.GetHas_Right()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else13
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	push eax		; Pushing Parameter 2
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	push eax		; Pushing Parameter 1
	mov eax,ecx
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+64]		; Calling method Tree.RemoveRight()
	add esp,8
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	jmp Else13End
Else13:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+24]		; Calling method Tree.GetKey()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-8],eax		; Assigning eax into variable auxkey1
	push ecx		; Save 'this' pointer for current function
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+20]		; Calling method Tree.GetLeft()
	pop ecx		; Recover 'this' pointer for current function
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+24]		; Calling method Tree.GetKey()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-12],eax		; Assigning eax into variable auxkey2
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-12]		; Assigning address of variable auxkey2 into eax
	push eax		; Pushing Parameter 2
	mov eax,[ebp-8]		; Assigning address of variable auxkey1 into eax
	push eax		; Pushing Parameter 1
	mov eax,ecx
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+48]		; Calling method Tree.Compare()
	add esp,8
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else14
	push ecx		; Save 'this' pointer for current function
	mov eax,[ecx+28]		; Assigning address of field my_null into eax
	push eax		; Pushing Parameter 1
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+12]		; Calling method Tree.SetLeft()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,0
	push eax		; Pushing Parameter 1
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+40]		; Calling method Tree.SetHas_Left()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	jmp Else14End
Else14:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ecx+28]		; Assigning address of field my_null into eax
	push eax		; Pushing Parameter 1
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+8]		; Calling method Tree.SetRight()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,0
	push eax		; Pushing Parameter 1
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+44]		; Calling method Tree.SetHas_Right()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
Else14End:
Else13End:
Else12End:
	mov eax,1
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$Remove
Tree$RemoveRight:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,4		; Allocate new stack frame
	jmp While3Test
While3Loop:
	push ecx		; Save 'this' pointer for current function
	push ecx		; Save 'this' pointer for current function
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+16]		; Calling method Tree.GetRight()
	pop ecx		; Recover 'this' pointer for current function
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+24]		; Calling method Tree.GetKey()
	pop ecx		; Recover 'this' pointer for current function
	push eax		; Pushing Parameter 1
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+28]		; Calling method Tree.SetKey()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov [ebp+8],eax		; Assigning eax into parameter p_node
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+16]		; Calling method Tree.GetRight()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp+12],eax		; Assigning eax into parameter c_node
While3Test:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+32]		; Calling method Tree.GetHas_Right()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	jg While3Loop
	push ecx		; Save 'this' pointer for current function
	mov eax,[ecx+28]		; Assigning address of field my_null into eax
	push eax		; Pushing Parameter 1
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+8]		; Calling method Tree.SetRight()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,0
	push eax		; Pushing Parameter 1
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+44]		; Calling method Tree.SetHas_Right()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	mov eax,1
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$RemoveRight
Tree$RemoveLeft:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,4		; Allocate new stack frame
	jmp While4Test
While4Loop:
	push ecx		; Save 'this' pointer for current function
	push ecx		; Save 'this' pointer for current function
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+20]		; Calling method Tree.GetLeft()
	pop ecx		; Recover 'this' pointer for current function
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+24]		; Calling method Tree.GetKey()
	pop ecx		; Recover 'this' pointer for current function
	push eax		; Pushing Parameter 1
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+28]		; Calling method Tree.SetKey()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov [ebp+8],eax		; Assigning eax into parameter p_node
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+20]		; Calling method Tree.GetLeft()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp+12],eax		; Assigning eax into parameter c_node
While4Test:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+12]		; Assigning address of parameter c_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+36]		; Calling method Tree.GetHas_Left()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	jg While4Loop
	push ecx		; Save 'this' pointer for current function
	mov eax,[ecx+28]		; Assigning address of field my_null into eax
	push eax		; Pushing Parameter 1
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+12]		; Calling method Tree.SetLeft()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	push ecx		; Save 'this' pointer for current function
	mov eax,0
	push eax		; Pushing Parameter 1
	mov eax,[ebp+8]		; Assigning address of parameter p_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+40]		; Calling method Tree.SetHas_Left()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	mov eax,1
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$RemoveLeft
Tree$Search:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,16		; Allocate new stack frame
	mov eax,ecx
	mov [ebp-4],eax		; Assigning eax into variable current_node
	mov eax,1
	mov [ebp-12],eax		; Assigning eax into variable cont
	mov eax,0
	mov [ebp-8],eax		; Assigning eax into variable ifound
	jmp While5Test
While5Loop:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+24]		; Calling method Tree.GetKey()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-16],eax		; Assigning eax into variable key_aux
	mov eax,[ebp+8]		; Assigning address of parameter v_key into eax
	push eax
	mov eax,[ebp-16]		; Assigning address of variable key_aux into eax
	pop edx
	cmp edx,eax
	jl BooleanExpression7IsTrue
	mov eax,0
	jmp BooleanExpression7Store
BooleanExpression7IsTrue:
	mov eax,1
BooleanExpression7Store:
	cmp eax,0
	je Else15
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+36]		; Calling method Tree.GetHas_Left()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else16
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+20]		; Calling method Tree.GetLeft()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable current_node
	jmp Else16End
Else16:
	mov eax,0
	mov [ebp-12],eax		; Assigning eax into variable cont
Else16End:
	jmp Else15End
Else15:
	mov eax,[ebp-16]		; Assigning address of variable key_aux into eax
	push eax
	mov eax,[ebp+8]		; Assigning address of parameter v_key into eax
	pop edx
	cmp edx,eax
	jl BooleanExpression8IsTrue
	mov eax,0
	jmp BooleanExpression8Store
BooleanExpression8IsTrue:
	mov eax,1
BooleanExpression8Store:
	cmp eax,0
	je Else17
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+32]		; Calling method Tree.GetHas_Right()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else18
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-4]		; Assigning address of variable current_node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+16]		; Calling method Tree.GetRight()
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable current_node
	jmp Else18End
Else18:
	mov eax,0
	mov [ebp-12],eax		; Assigning eax into variable cont
Else18End:
	jmp Else17End
Else17:
	mov eax,1
	mov [ebp-8],eax		; Assigning eax into variable ifound
	mov eax,0
	mov [ebp-12],eax		; Assigning eax into variable cont
Else17End:
Else15End:
While5Test:
	mov eax,[ebp-12]		; Assigning address of variable cont into eax
	cmp eax,0
	jg While5Loop
	mov eax,[ebp-8]		; Assigning address of variable ifound into eax
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$Search
Tree$Print:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,8		; Allocate new stack frame
	mov eax,ecx
	mov [ebp-8],eax		; Assigning eax into variable current_node
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp-8]		; Assigning address of variable current_node into eax
	push eax		; Pushing Parameter 1
	mov eax,ecx
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+80]		; Calling method Tree.RecPrint()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	mov eax,1
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$Print
Tree$RecPrint:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,4		; Allocate new stack frame
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+36]		; Calling method Tree.GetHas_Left()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else19
	push ecx		; Save 'this' pointer for current function
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+20]		; Calling method Tree.GetLeft()
	pop ecx		; Recover 'this' pointer for current function
	push eax		; Pushing Parameter 1
	mov eax,ecx
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+80]		; Calling method Tree.RecPrint()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	jmp Else19End
Else19:
	mov eax,1
	mov [ebp-4],eax		; Assigning eax into variable ntb
Else19End:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+24]		; Calling method Tree.GetKey()
	pop ecx		; Recover 'this' pointer for current function
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+32]		; Calling method Tree.GetHas_Right()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else20
	push ecx		; Save 'this' pointer for current function
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter node into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+16]		; Calling method Tree.GetRight()
	pop ecx		; Recover 'this' pointer for current function
	push eax		; Pushing Parameter 1
	mov eax,ecx
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+80]		; Calling method Tree.RecPrint()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable ntb
	jmp Else20End
Else20:
	mov eax,1
	mov [ebp-4],eax		; Assigning eax into variable ntb
Else20End:
	mov eax,1
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$RecPrint
Tree$accept:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,4		; Allocate new stack frame
	mov eax,333
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,ecx
	push eax		; Pushing Parameter 1
	mov eax,[ebp+8]		; Assigning address of parameter v into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+4]		; Calling method Visitor.visit()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable nti
	mov eax,0
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Tree$accept
Visitor$visit:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,4		; Allocate new stack frame
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter n into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+32]		; Calling method Tree.GetHas_Right()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else21
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter n into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+16]		; Calling method Tree.GetRight()
	pop ecx		; Recover 'this' pointer for current function
	mov [ecx+12],eax		; Assigning eax into field r
	push ecx		; Save 'this' pointer for current function
	mov eax,ecx
	push eax		; Pushing Parameter 1
	mov eax,[ecx+12]		; Assigning address of field r into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+84]		; Calling method Tree.accept()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable nti
	jmp Else21End
Else21:
	mov eax,0
	mov [ebp-4],eax		; Assigning eax into variable nti
Else21End:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter n into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+36]		; Calling method Tree.GetHas_Left()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else22
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter n into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+20]		; Calling method Tree.GetLeft()
	pop ecx		; Recover 'this' pointer for current function
	mov [ecx+8],eax		; Assigning eax into field l
	push ecx		; Save 'this' pointer for current function
	mov eax,ecx
	push eax		; Pushing Parameter 1
	mov eax,[ecx+8]		; Assigning address of field l into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+84]		; Calling method Tree.accept()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable nti
	jmp Else22End
Else22:
	mov eax,0
	mov [ebp-4],eax		; Assigning eax into variable nti
Else22End:
	mov eax,0
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from Visitor$visit
MyVisitor$visit:
	push ebp		; Save caller's stack frame pointer
	mov ebp,esp
	sub esp,4		; Allocate new stack frame
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter n into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+32]		; Calling method Tree.GetHas_Right()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else23
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter n into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+16]		; Calling method Tree.GetRight()
	pop ecx		; Recover 'this' pointer for current function
	mov [ecx+12],eax		; Assigning eax into field r
	push ecx		; Save 'this' pointer for current function
	mov eax,ecx
	push eax		; Pushing Parameter 1
	mov eax,[ecx+12]		; Assigning address of field r into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+84]		; Calling method Tree.accept()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable nti
	jmp Else23End
Else23:
	mov eax,0
	mov [ebp-4],eax		; Assigning eax into variable nti
Else23End:
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter n into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+24]		; Calling method Tree.GetKey()
	pop ecx		; Recover 'this' pointer for current function
	push ecx
	push eax
	call put		; Calling System.Out.Println()
	add sp,4
	pop ecx
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter n into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+36]		; Calling method Tree.GetHas_Left()
	pop ecx		; Recover 'this' pointer for current function
	cmp eax,0
	je Else24
	push ecx		; Save 'this' pointer for current function
	mov eax,[ebp+8]		; Assigning address of parameter n into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+20]		; Calling method Tree.GetLeft()
	pop ecx		; Recover 'this' pointer for current function
	mov [ecx+8],eax		; Assigning eax into field l
	push ecx		; Save 'this' pointer for current function
	mov eax,ecx
	push eax		; Pushing Parameter 1
	mov eax,[ecx+8]		; Assigning address of field l into eax
	mov ecx,eax
	mov eax,[ecx]
	call dword ptr [eax+84]		; Calling method Tree.accept()
	add esp,4
	pop ecx		; Recover 'this' pointer for current function
	mov [ebp-4],eax		; Assigning eax into variable nti
	jmp Else24End
Else24:
	mov eax,0
	mov [ebp-4],eax		; Assigning eax into variable nti
Else24End:
	mov eax,0
	mov esp,ebp		; Deallocate local variables from stack
	pop ebp		; Restore ebp to caller's stack frame pointer
	ret		; Retrun from MyVisitor$visit
end
